/**
 * 三种方法的用处：
 *    第一种方法，通过bean的缺省构造函数创建，当各个bean的业务逻辑相互比较独立的时候或者和外界关联较少的时候可以使用。
 *    第二种方法，利用静态factory方法创建，可以统一管理各个bean的创建，如各个bean在创建之前需要相同的初始化处理，则可用这个factory方法险进行统一的处理等等。
 *    第三种方法，利用实例化factory方法创建，即将factory方法也作为了业务bean来控制，觉得1可用于集成其他框架的bean创建管理方法，2能够使bean和factory的角色互换。
 *     
 * @author MIAO
 * Created on 2011-10-12
 * For more information, please visit:ismiao.com
 */
package com.ismiao.spring.instantiate;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestInstantiate {
	public static void main(String[] args) {
		testHello();
		testHelloForStaticFactory();
		testHelloForInstanceFactory();
	}

	public static void testHello() {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
				"com/ismiao/example/instantiate/instantiate.beans.xml");
		IHello hello = (IHello) applicationContext.getBean("sayhello");
		hello.sayHello();
	}

	public static void testHelloForStaticFactory() {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
				"com/ismiao/example/instantiate/instantiate.beans.xml");
		IHello hello = (IHello) applicationContext.getBean("sayhello2");
		hello.sayHello2();
	}

	public static void testHelloForInstanceFactory() {
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
				"com/ismiao/example/instantiate/instantiate.beans.xml");
		IHello hello = (IHello) applicationContext.getBean("sayhello3");
		hello.sayHello3();
	}
}
